﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using TCC_Hotel.Entidades;
using TCC_Hotel.Serviços.BDServices;
using System.Drawing;

namespace TCC_Hotel.Apresentacao.Empresas
{
    public partial class ListarEmpresas : System.Web.UI.Page
    {

        List<Empresa> empresas = null;
        EmpresaService servico = new EmpresaService();
        LoginService servico_Login = new LoginService();

        protected void Page_Load(object sender, EventArgs e)
        {
            //Recupera o usuario corrente
            string usuario = Request.ServerVariables["AUTH_USER"].ToString();

           
            //Verifica permissao ao acesso da página
            if (!servico_Login.RecuperarPermissaoCache(usuario).Listar_Empresas)
            {
                //Redireciona para a pagina inicial
                Response.Redirect("~/");
            }

            //Verifica permissao ao acesso da página
            if (!servico_Login.RecuperarPermissaoCache(usuario).Cadastrar_Empresas)
            {
                //Redireciona para a pagina inicial
                btnCadastrar.Visible = false;

                //tira as colunas nao permitida do usuario
                for (int i = 0; i < grdEmpresas.Columns.Count; i++)
                {
                    if (grdEmpresas.Columns[i].AccessibleHeaderText == "Editar" || grdEmpresas.Columns[i].AccessibleHeaderText == "Faturamento")
                    {
                        grdEmpresas.Columns[i].Visible = false;
                    }
                }
            }

            if (!IsPostBack)
            {              
                //recupera todos os funcionarios do banco de dados          
                ReloadGridView();
            }
        }

        /// <summary>
        /// Evento do botão de filtrar os nomes para facilitar a busca
        /// </summary>
        protected void btnBusca_Click(object sender, EventArgs e)
        {

            ReloadGridView();
        }

        /// <summary>
        /// Limpa a busca
        /// </summary>
        protected void btnLimpar_Click(object sender, EventArgs e)
        {
            txtBusca.Text = null;
            ReloadGridView();
        }

        /// <summary>
        /// Evento que controla a paginação e verifica o cache
        /// </summary>
        protected void grdEmpresas_PageIndexChanging(object sender, GridViewPageEventArgs e)
        {
            //Consulta os funcionarios no serviço. Nele será verificado o cache
            empresas = servico.ListarEmpresasCache();

            empresas = empresas.Where(i => i.Nome.ToUpper().Contains(txtBusca.Text.ToUpper())).OrderBy(i => i.Nome).ToList();


            //Na mudança de pagina, chama o evento de aparecer a lista
            grdEmpresas.PageIndex = e.NewPageIndex;
            grdEmpresas.DataSource = empresas;
            grdEmpresas.DataBind();
        }

        /// <summary>
        /// Evento de click em algum dos botões 
        /// </summary>
        protected void grdEmpresas_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            //Verifica qual o botão que o usuário clicou
            if (e.CommandName == "detalharEmpresa")
            {

                //Redireciona para a pagina de detalhes correspondente com o CPF como parametro
                Response.Redirect("~/Apresentacao/Empresas/DetalharEmpresa.aspx?cnpj=" + grdEmpresas.Rows[Convert.ToInt16(e.CommandArgument)].Cells[2].Text);



            }
            else if (e.CommandName == "editarEmpresa")
            {
                //Redireciona para a pagina de editar correspondente com o CPF como parametro
                Response.Redirect("~/Apresentacao/Empresas/EditarEmpresa.aspx?cnpj=" + grdEmpresas.Rows[Convert.ToInt16(e.CommandArgument)].Cells[2].Text);


            }
            else if (e.CommandName == "naoAutorizarEmpresa")
            {                
                string cnpj = grdEmpresas.Rows[Convert.ToInt16(e.CommandArgument)].Cells[2].Text;
             
                //chama o servico que desliga o funcionario do hotel e verifica se o funcionário foi excluido
                if (servico.NaoAutorizaEmpresa(cnpj))
                {
                    //Remove o cache para atualizar informação
                    HttpContext.Current.Cache.Remove("Lista_Empresa");

                    MensagemJS("Empresa não mais autorizada para faturamento!");
                }
                else
                {
                    MensagemJS("Ocorreu um erro e a empresa ainda está autorizada!");
                }
                ReloadGridView();
            }
        }
        /// <summary>
        /// Faz o reload do gridview quando necessário e consulta o cache
        /// </summary>
        private void ReloadGridView()
        {

            //Consulta as empresas no serviço. Nele será verificado o cache
            empresas = servico.ListarEmpresasCache();

            empresas = empresas.Where(i => i.Nome.ToUpper().Contains(txtBusca.Text.ToUpper())).OrderBy(i=>i.Nome).ToList();
           

            //popular gridView
            grdEmpresas.DataSource = empresas;
            grdEmpresas.DataBind();

        }

        /// <summary>
        /// Lança um popup em javaScript com alguma mensagem
        /// </summary>
        /// <param name="msg">Mensagem do popup</param>
        public void MensagemJS(string msg)
        {
            //Formata um alert para o usuário
            Page.ClientScript.RegisterStartupScript(

                     this.GetType(),

                     "error",

                     "$(window).load(function(){alert('" + msg + "')});",

                     true);

        }

       

        /// <summary>
        /// Evento chamado a cada nova linha criada. O evento verificará se a empresa 
        /// esta autorizada o faturamento. Se sim
        /// ele desabilita o botão de nao autorizar, ou se não deixa habilitado
        /// </summary>
        protected void grdEmpresas_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            string value = null;
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                string nome = DataBinder.Eval(e.Row.DataItem, "Nome").ToString();
                ((LinkButton)e.Row.Cells[6].Controls[0]).OnClientClick = "return confirm('Deseja realmente não mais autorizar o faturamento para a empresa " + nome + "?');"; 
               
                //Pega o valor correspondente a coluna Ativo
                value = DataBinder.Eval(e.Row.DataItem, "AutorizadoFatura").ToString();

                //Se value for false desabilita o botao desligar
                if (value == "False")
                {
                    e.Row.Cells[6].Text = "";
                }               
            }
        }
        /// <summary>
        /// Evento do botão de cadastrar que chama a tela de cadastro
        /// </summary>
        protected void btnCadastrar_Click(object sender, EventArgs e)
        {
            //Redireciona para a pagina de cadastro
            Response.Redirect("~/Apresentacao/Empresas/CadastrarEmpresa.aspx");

        }

       
    }
}